/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ventasInternet.beans;

import com.ventasInternet.Delegate.DelegateVentasInternet;
import com.ventasInternet.entity.Categoria;
import com.ventasInternet.utils.ManejadorMensajes;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;


import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;
import org.primefaces.event.FileUploadEvent;

/**
 *
 * @author DESARO03
 */
@ManagedBean(name="gestionCategoriasBean")
@SessionScoped
public class GestionCategoriasBean implements  Serializable {
    private Categoria categoria;
    private List<Categoria> listaCategorias;
    
    private String paramNombreBusqueda;
    private int estadoNME;
    /** Creates a new instance of GestionCategoriasBean */
    public GestionCategoriasBean() {
        this.categoria = new Categoria();
        this.setListaCategorias(this.obtenerCategorias(null));
    }

    public Categoria getCategoria() {
        return categoria;
    }

    public void setCategoria(Categoria categoria) {
        this.categoria = categoria;
    }

   

    public List<Categoria> getListaCategorias() {
        return listaCategorias;
    }

    public void setListaCategorias(List<Categoria> listaCategorias) {
        this.listaCategorias = listaCategorias;
    }

    public String getParamNombreBusqueda() {
        return paramNombreBusqueda;
    }

    public void setParamNombreBusqueda(String paramNombreBusqueda) {
        this.paramNombreBusqueda = paramNombreBusqueda;
    }
    
    /**
     * ******************************** Metodos ********************************
     */
    /**
     * Metodo para guardar una nueva categoria.
     * @throws Exception 
     */
    private void guardarCategoria() throws Exception{
        DelegateVentasInternet.getInstance().createCategoriaDL(this.categoria);
    }
    /**
     * Metodo para modidicar una nueva categoria
     * @throws Exception 
     */
    private void modificarCategoria() throws Exception{
       DelegateVentasInternet.getInstance().editCategoriaDL(this.categoria);         
    }
    /**
     * Metodo para Eliminar una nueva categoria
     * @throws Exception 
     */
    private void eliminarCategoria() throws Exception{
        DelegateVentasInternet.getInstance().removeCategoriaDL(this.categoria);
    }
    
    /**
     * Obtienes una lista decategorias segun el parametro de busqueda
     * @param paramBus
     * @return 
     */
    private List<Categoria> obtenerCategorias(String paramBus){
        List<Categoria> listaCategoriaTmp=null;
        try{
            if(paramBus==null){
                listaCategoriaTmp = DelegateVentasInternet.getInstance().findAllCategoriaDL();
            }
            else{
                listaCategoriaTmp = DelegateVentasInternet.getInstance().findCategoriaByNombre(paramBus);
            }
            return listaCategoriaTmp;
        } catch (Exception ex) {
            Logger.getLogger(GestionCategoriasBean.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }
    /***
     * Iniciametodo MOdificar
     * @param categoria 
     */
    public void setupModificar(Categoria categoria){
        this.estadoNME = 2;
        this.setCategoria(categoria);
    }
    /**
     * IniciarMetodo Nuevo
     */
    public void setupNuevo(){
        this.estadoNME = 1;
        this.categoria = new Categoria();
        
    }
    /**
     * Iniciar Eliminacion
     * @param categoria 
     */
    public void setupEliminar(Categoria categoria){
        this.estadoNME = 3;
       this.setCategoria(categoria);
        
    }
    /**
     * Metodo para Guardar,Modificar e Eliminar categorias
     */
    public void alterarCategoria(){
        RequestContext context = RequestContext.getCurrentInstance();
        switch(estadoNME){
            case 1 :
                    try {
                        this.guardarCategoria();
                        context.execute("wgv_newEditCategoria.hide()");
                        ManejadorMensajes.showMessageInfo("Categoria creada satisfactoriamente.");
                        this.setListaCategorias(this.obtenerCategorias(null));
                    } catch (Exception ex) {
                        Logger.getLogger(GestionCategoriasBean.class.getName()).log(Level.SEVERE, null, ex);
                    }
                break;
            case 2 :
                    try {
                        this.modificarCategoria();
                        context.execute("wgv_newEditCategoria.hide()");
                        ManejadorMensajes.showMessageInfo("Categoria modificada satisfactoriamente.");
                        this.setListaCategorias(this.obtenerCategorias(null));
                    } catch (Exception ex) {
                        Logger.getLogger(GestionCategoriasBean.class.getName()).log(Level.SEVERE, null, ex);
                    }
                break;
            case 3 :
                    try {
                        this.eliminarCategoria();
                        //context.execute("confirm_elimCategoria.hide()");
                        ManejadorMensajes.showMessageInfo("Categoria modificada satisfactoriamente.");
                        this.setListaCategorias(this.obtenerCategorias(null));
                    } catch (Exception ex) {
                        Logger.getLogger(GestionCategoriasBean.class.getName()).log(Level.SEVERE, null, ex);
                    }
                break;
             default:
                throw new AssertionError();
        }
        this.setCategoria(null);
    }
    public void limpiar(){
        this.setCategoria(null);
    }
    /**
     * Metodo para buscar Categorias segun el parametro ingresado
     */
    public void buscarCategorias(){
        this.setListaCategorias( this.obtenerCategorias(this.getParamNombreBusqueda()));
        
    }
   
}
